home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / vmsnet / qix / part02 < prev    next >
Encoding:
Text File  |  1992-02-25  |  14.6 KB  |  533 lines

  1. Newsgroups: vmsnet.sources.games
  2. Path: uunet!think.com!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!mary.fordham.edu!areid
  3. From: areid@mary.fordham.edu (Darin Reid)
  4. Subject: Qix.01 -- arcade based game
  5. Organization: Fordham University
  6. Message-ID: <25FEB199218451852@mary.fordham.edu>
  7. News-Software: VAX/VMS VNEWS 1.41    
  8. Sender: news@ctr.columbia.edu (The Daily Lose)
  9. Date: Tue, 25 Feb 1992 22:45:00 GMT
  10.  
  11. Thanks to Ian!!!!!
  12.  
  13. Neither I nor my Family accept responsibility for any problems with this
  14. program. Run it at your own discretion.
  15.  
  16.  
  17. - Darin
  18. $! ------------------ CUT HERE -----------------------
  19. $ v='f$verify(f$trnlnm("SHARE_VERIFY"))'
  20. $!
  21. $! This archive created by VMS_SHARE Version 7.2-007  22-FEB-1990
  22. $!   On 24-FEB-1992 16:42:47.55   By user INA_IAN 
  23. $!
  24. $! This VMS_SHARE Written by:
  25. $!    Andy Harper, Kings College London UK
  26. $!
  27. $! Acknowledgements to:
  28. $!    James Gray       - Original VMS_SHARE
  29. $!    Michael Bednarek - Original Concept and implementation
  30. $!
  31. $!+ THIS PACKAGE DISTRIBUTED IN 5 PARTS, TO KEEP EACH PART
  32. $!  BELOW 30 BLOCKS
  33. $!
  34. $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
  35. $! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
  36. $!
  37. $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
  38. $!       1. QIX.COM;1
  39. $!       2. QIX.PAS;1
  40. $!       3. QIX.SCN;1
  41. $!       4. QIXF.FOR;1
  42. $!       5. QIXH.FOR;1
  43. $!       6. QIXTOPINI.FOR;1
  44. $!
  45. $set="set"
  46. $set symbol/scope=(nolocal,noglobal)
  47. $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID"))
  48. $e="write sys$error  ""%UNPACK"", "
  49. $w="write sys$output ""%UNPACK"", "
  50. $ if f$trnlnm("SHARE_LOG") then $ w = "!"
  51. $ ve=f$getsyi("version")
  52. $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START
  53. $ e "-E-OLDVER, Must run at least VMS 4.4"
  54. $ v=f$verify(v)
  55. $ exit 44
  56. $UNPACK: SUBROUTINE ! P1=filename, P2=checksum
  57. $ if f$search(P1) .eqs. "" then $ goto file_absent
  58. $ e "-W-EXISTS, File ''P1' exists. Skipped."
  59. $ delete 'f'*
  60. $ exit
  61. $file_absent:
  62. $ if f$parse(P1) .nes. "" then $ goto dirok
  63. $ dn=f$parse(P1,,,"DIRECTORY")
  64. $ w "-I-CREDIR, Creating directory ''dn'."
  65. $ create/dir 'dn'
  66. $ if $status then $ goto dirok
  67. $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped."
  68. $ delete 'f'*
  69. $ exit
  70. $dirok:
  71. $ w "-I-PROCESS, Processing file ''P1'."
  72. $ if .not. f$verify() then $ define/user sys$output nl:
  73. $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1'
  74. PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET(
  75. SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:=
  76. CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b));
  77. LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION(
  78. BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1);
  79. IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE;
  80. MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1;
  81. ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")=
  82. 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF";
  83. POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r);
  84. ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1;
  85. COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE,
  86. "output_file"));ENDPROCEDURE;Unpacker;QUIT;
  87. $ delete/nolog 'f'*
  88. $ CHECKSUM 'P1'
  89. $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT
  90. $ e "-E-CHKSMFAIL, Checksum of ''P1' failed."
  91. $ ENDSUBROUTINE
  92. $START:
  93. $ create 'f'
  94. X$ if "''f$mode()'" .eqs. "INTERACTIVE" then goto start$
  95. X$ assign _Nl: sys$print
  96. X$ ren sys$Login:qix.log `5B`5D*
  97. X$ start$:
  98. X$ pas/nodebug/nolist/nocheck qix
  99. X$ Link/Nodebug/nomap/notrace qix,qixf,qixh,util/lib
  100. X$ exit
  101. $ CALL UNPACK QIX.COM;1 2015366673
  102. $ create 'f'
  103. X`7B$C+`7D
  104. X`7B$S-`7D
  105. X`7B
  106. X
  107. X`09`09 XXXX    XXXXX   X    X
  108. X`09`09X    X     X      X  X
  109. X`09`09X    X     X       XX
  110. X`09`09X  X X     X       XX
  111. X`09`09X   X      X      X  X
  112. X`09`09 XXX X   XXXXX   X    X
  113. X`09`09
  114. X
  115. X
  116. X`09`09Program`09: Qix`20
  117. X
  118. X`09`09Author`09: Murray Speight`20
  119. X
  120. X`09`09Place`09: University Of Waikato`20
  121. X
  122. X`09`09Date `09: Mar 1982`20
  123. X
  124. X`09Software Is Subject To Change Without Notification
  125. X        The Author And His Family assume No Rsponsability For
  126. X`09Its Reliabliity Or Use.`20
  127. X
  128. X                                `20
  129. X`09A Game Derived From a Video Game Of The Same Name  `7D
  130. X
  131. X
  132. X
  133. X
  134. X
  135. XProgram Qix(Input,Output);
  136. X
  137. XLabel 9999;
  138. X
  139. XConst   Max_Len_snake `09= 40;
  140. X`09Max_Buff_len `09= 200;
  141. X        Blank   `09= ' ';
  142. X        You     `09= 'O';
  143. X        Qix_Head        = '`60';
  144. X`09Esc`09`09= '`1B';
  145. X
  146. XType`09Buff_String `09= PAcked Array `5B1..Max_Buff_Len`5D Of Char;
  147. X`09
  148. X`09rng`09`09= 1..20;
  149. X
  150. X        Wall_Types`09= (Inside,Outside,Created,Other,Snake,Tmp,TmpN,TmpN2,Tm
  151. VpCreat);
  152. X
  153. X`09Char_On_Screen`09= Record
  154. X`09   Sym`09    `09: Char;
  155. X`09   Wall`09`09: Wall_Types;
  156. X`09end;
  157. X
  158. X        Direction  = ( Clockwise , AntiClockwise );
  159. X
  160. X        Screen_type = Array`5B0..24,0..81`5D Of Char_On_Screen;
  161. X
  162. X
  163. XVar`09Screen   `09`09: Screen_Type;
  164. X`09Buff     `09`09: Buff_String;
  165. X`09Buff_Len `09`09,
  166. X`09Marked_Clock_Greeb_X`09,
  167. X`09Marked_Clock_Greeb_Y`09,
  168. X`09Marked_Anti_Greeb_X`09,
  169. X`09Marked_Anti_Greeb_Y`09,
  170. X`09Num_Marked_Clock_Greeb `09,
  171. X`09Num_Marked_Anti_Greeb `09,
  172. X        Last_Clock_Greeb_X`09,
  173. X        Last_Clock_Greeb_y`09,
  174. X        Last_Anti_Greeb_X`09,
  175. X        Last_Anti_Greeb_y`09,
  176. X        Clock_Greeb_X`09`09,
  177. X        Clock_Greeb_y`09`09,
  178. X        Anti_Greeb_X`09`09,
  179. X        Anti_Greeb_y`09`09,
  180. X        Extra_Greeb_X`09`09,
  181. X        Extra_Greeb_Y`09`09,
  182. X        Last_Extra_Greeb_X`09,
  183. X        Last_Extra_Greeb_Y`09,
  184. X        You_X`09`09`09,
  185. X`09You_Y`09`09`09,
  186. X        Last_You_X  `09`09,
  187. X        Last_You_Y  `09`09,
  188. X`09Move_X`09`09`09,
  189. X        Level `09`09`09,
  190. X`09Move_y`09`09`09,
  191. X        Start_Creat_X `09`09,
  192. X        Start_Creat_Y `09`09,
  193. X        Last_Start_Creat_X`09,
  194. X        Last_Start_Creat_Y`09,
  195. X        Snake_After_X `09`09,
  196. X        Snake_After_Y `09`09,
  197. X        Snake_Head_X `09`09,
  198. X`09Snake_Head_Y `09`09,
  199. X        Snake_Move_X `09`09,
  200. X        Snake_Move_Y `09`09,
  201. X`09Snake_Tail_X`09`09,
  202. X        Lives`09`09`09,
  203. X        Score`09`09`09,
  204. X        Amt_Filled_In `09`09,
  205. X        Len_Snake `09`09,
  206. X`09Len_Snake_When_Stuck`09,
  207. X`09Num_Snake_Searched`09,
  208. X`09Num_Moves_After_This_Pt ,
  209. X`09Moves_since_stuck`09,
  210. X`09Snake_Tail_Y`09`09: Integer;
  211. X        Seed`09`09`09: REal;
  212. X        Can_Create_wall `09,
  213. X        Moving_Extra_Greebly `09,
  214. X`09Marked_Clock_Greeb`09,
  215. X`09Marked_Anti_Greeb`09,
  216. X        Snake_got_stuck `09,
  217. X`09Died`09`09`09,
  218. X`09Creating_wall`09`09: Boolean;
  219. X        Dir_You  `09`09,`09`09`09`7B Direction You Are moving In `7D
  220. X        Dir_When_Start_Creat `09: Direction;`09`09`7B Direction You Were In
  221. V Before Starting To Create `7D
  222. X
  223. XProcedure TopTen(Var Score : Integer);extern;
  224. X
  225. XProcedure Sleep(X_Sec,X_100_n_Sec : Integer);Extern;
  226. X
  227. XProcedure Help_Screen(%STDESCR file$ : Packed array `5Brng`5D of char );exte
  228. Vrn;
  229. X
  230. XProcedure TT_init( One : Integer);extern;
  231. X
  232. XFunction  TT_1_Char_Now:Integer;extern;
  233. X
  234. XProcedure TT_Write( S : Buff_String; L : Integer );extern;
  235. X
  236. XProcedure TT_Cancel;extern;
  237. X
  238. XProcedure Sleep_Set( Seven : Integer ; Sec_100_th : Integer );extern;
  239. X
  240. XProcedure Sleep_Start;extern;
  241. X
  242. XProcedure Sleep_Wait;extern;
  243. X
  244. X
  245. X
  246. X
  247. XProcedure Break_Buff;
  248. X
  249. X
  250. XBegin
  251. X   TT_Write(Buff,Buff_Len);
  252. X   Buff_len := 0;
  253. Xend;
  254. X
  255. XProcedure Write_Buff( C : Char);
  256. X
  257. XBegin
  258. X   Buff_Len := Buff_Len + 1;
  259. X   Buff`5BBuff_Len`5D := C;
  260. X   If Buff_Len > ( MAx_Buff_len - 10 ) Then`20
  261. X`09Break_Buff;
  262. Xend;
  263. X
  264. X
  265. X
  266. X
  267. XProcedure Pos(X,Y : Integer; Ch : Char);
  268. X
  269. XBegin
  270. X   Buff`5Bbuff_Len+1`5D := Esc;
  271. X   Buff`5BBuff_Len+2`5D := 'Y';
  272. X   Buff`5BBuff_Len+3`5D := Chr(31+x);
  273. X   Buff`5BBuff_Len+4`5D := Chr(31+y);
  274. X   Buff`5BBuff_Len+5`5D := Ch;
  275. X   Buff_Len := Buff_Len + 5;
  276. X   If Buff_Len > ( MAx_Buff_len - 10 ) Then`20
  277. X`09Break_Buff;
  278. XEnd;
  279. X
  280. X
  281. XProcedure Draw_Screen;
  282. X
  283. XVar X,Y,Dummy : Integer;
  284. X
  285. XBegin
  286. X   Break_Buff;
  287. X   Write(Esc,'<',Esc,'`5B?2l');
  288. X   Write(Esc,'H',esc,'J',Esc,'F');
  289. X   For Y := 1 to 80 do`20
  290. X      Write(Screen`5B1,Y`5D.Sym);
  291. X   Writeln;
  292. X   For X := 2 to 22 do  begin
  293. X      Write(Esc,'Y',chr(31+X),Chr(31+1),Screen`5BX,1`5D.Sym);
  294. X      Writeln(Esc,'Y',CHr(31+X),Chr(31+80),Screen`5BX,80`5D.Sym);
  295. X   end;
  296. X   For Y := 1 to 80 do`20
  297. X      Write(Screen`5B23,Y`5D.Sym);
  298. X   Writeln(Esc,'G');
  299. X   Write(Esc,'<',esc,'`5B1m',Esc,'#6Covered ');
  300. X   Write(Esc,'`5B24;9H');
  301. X   Write((Amt_Filled_In * 100 / 1638 ):5:2);
  302. X   Write(esc,'`5B24;16HScore ');
  303. X   write(esc,'`5B24;22H',Score:5);
  304. X      Write(esc,'`5B24;29HLives');
  305. X   For Dummy := 1 to Lives Do`20
  306. X      Write(' O');
  307. X   Writeln(esc,'`5B0m',esc,'`5B?2l',esc,'F',esc,'H');
  308. X   Pos(Snake_Head_X,Snake_Head_Y,Qix_Head);
  309. X   Pos(You_X,You_Y,You);
  310. X   Break_Buff;
  311. Xend;
  312. X
  313. XFunction Rand( X : Integer):Integer;
  314. X
  315. X   Function mth$Random(Var Seed : Real):Real;Extern;
  316. X
  317. X
  318. XBegin
  319. X   Rand :=  Trunc(Mth$Random(Seed)*X+1);
  320. Xend;
  321. X
  322. XFunction Correct_Sym(X,Y,Compare_X,Compare_Y:Integer):Char;
  323. X
  324. XVar Count : Integer;
  325. X
  326. XBegin
  327. X      Count := 0;  `20
  328. X      If Screen`5BX-1,y`5D.Sym In `5B'l','w','k','t','n','u','x'`5D Then`20
  329. X         Count := Count + 1
  330. X      Else
  331. X         If ( X - 1 = Compare_X ) And ( Y = Compare_Y ) Then`20
  332. X            Count := Count + 1;
  333. X      If Screen`5Bx,Y-1`5D.Sym In `5B'l','w','t','n','m','v','q'`5D Then
  334. X         Count := Count + 2
  335. X      Else
  336. X         If ( X = Compare_X ) And ( Y - 1 = Compare_Y ) Then`20
  337. X            Count := Count + 2;
  338. X      If Screen`5BX,Y+1`5D.Sym In `5B'w','n','v','k','u','j','q'`5D Then`20
  339. X         Count := Count + 4
  340. X      Else
  341. X         If ( X = Compare_X ) And ( Y + 1 = Compare_Y ) Then`20
  342. X            Count := Count + 4;
  343. X      If Screen`5BX+1,Y`5D.Sym In `5B't','n','u','m','v','j','x'`5D Then`20
  344. X         Count := Count + 8
  345. X      Else
  346. X         If ( X + 1 = Compare_X ) And ( Y = Compare_Y ) Then`20
  347. X            Count := Count + 8;
  348. X      Case Count Of`20
  349. X         0`09: `7B NOthing `7D;
  350. X         1,8,9 `09: Correct_Sym := 'x';
  351. X         2,4,6`09: Correct_Sym := 'q';
  352. X         3`09: Correct_Sym := 'j';
  353. X         5`09: Correct_Sym := 'm';
  354. X         7`09: Correct_Sym := 'v';
  355. X         10`09: Correct_Sym := 'k';
  356. X         11`09: Correct_Sym := 'u';
  357. X         12`09: Correct_Sym := 'l';
  358. X         13`09: Correct_Sym := 't';
  359. X         14`09: Correct_Sym := 'w';
  360. X         15`09: Correct_Sym := 'n'
  361. X      end `7B case `7D;
  362. Xend;
  363. X
  364. XProcedure IniTalise_screen;
  365. X
  366. XVar X,Y,Dummy,Snake_Move_x,Snake_Move_Y,Cnt : Integer;
  367. X    Save_ch : Char;
  368. X
  369. Xbegin
  370. X   Died := False;
  371. X   Level := Level + 1;
  372. X   Sleep_set(7,17-Level);
  373. X   For X := 0 To 24 Do`20
  374. X      For Y := 0 To 81 Do Begin
  375. X         Screen`5BX,Y`5D.Sym := Blank;
  376. X         Screen`5BX,Y`5D.Wall := Other;
  377. X   End;
  378. X   For Y := 0 To 81 Do Begin
  379. X      Screen`5B0,Y`5D.Sym := '.';
  380. X      Screen`5B0,Y`5D.Wall := Outside;
  381. X      Screen`5B24,Y`5D.Sym := '.';
  382. X      Screen`5B24,Y`5D.Wall := Outside;
  383. X   End `7B For `7D;
  384. X   For X := 0 To 24 Do Begin
  385. X      Screen`5BX,0`5D.Sym := '.';
  386. X      Screen`5BX,0`5D.Wall:= Outside;
  387. X      Screen`5BX,81`5D.Sym := '.';
  388. X      Screen`5BX,81`5D.Wall := Outside;
  389. X   end;
  390. X   For Y := 1 To 80 Do Begin
  391. X      Screen`5B1,Y`5D.Sym  := 'q';
  392. X      Screen`5B1,Y`5D.Wall  := Inside;
  393. X      Screen`5B23,Y`5D.Sym := 'q';
  394. X      Screen`5B23,Y`5D.Wall := Inside;
  395. X   end;
  396. X   For X := 1 to 23 Do Begin
  397. X      Screen`5BX,1`5D.Sym := 'x';
  398. X      Screen`5BX,1`5D.Wall := Inside;
  399. X      Screen`5BX,80`5D.Sym := 'x';
  400. X      Screen`5BX,80`5D.Wall := Inside;
  401. X   end;
  402. X   Screen`5B1,1`5D.Sym := 'l';
  403. X   Screen`5B1,1`5D.wall := Inside;
  404. X   Screen`5B1,80`5D.Sym := 'k';
  405. X   Screen`5B1,80`5D.wall := Inside;
  406. X   Screen`5B23,1`5D.Sym := 'm';
  407. X   Screen`5B23,1`5D.wall := Inside;
  408. X   Screen`5B23,80`5D.Sym := 'j';
  409. X   Screen`5B23,80`5D.wall := Inside;
  410. X   You_X := 1;
  411. X   You_Y := 1;
  412. X   Move_X := 0;
  413. X   Move_Y := 1;
  414. X   Last_You_X := 2;
  415. X   Last_You_Y := 1;
  416. X   Dir_You := Clockwise;
  417. X   Snake_Head_X := 11;
  418. X   Snake_Head_Y := 40;
  419. X   Snake_Tail_X := Snake_Head_X;
  420. X   Snake_Tail_Y := Snake_Head_Y;
  421. X   Moves_since_stuck := 0;
  422. X   Screen`5BSnake_Head_X,Snake_Head_Y`5D.Sym  :=  Qix_Head;
  423. X   Screen`5BSnake_Head_X,Snake_Head_Y`5D.Wall := Snake;
  424. X   Len_Snake := 0;
  425. X   Amt_Filled_In := 0;
  426. X   Moving_extra_Greebly := False;
  427. X   Snake_got_stuck := False;
  428. X   Snake_Move_X := 0;
  429. X   Snake_Move_Y := -1;
  430. X   Can_Create_wall := False;
  431. X   Clock_Greeb_X := 23;`20
  432. X   Clock_Greeb_Y := 40;
  433. X   Last_Clock_Greeb_X := Clock_Greeb_X;
  434. X   Last_Clock_Greeb_Y := Clock_Greeb_Y + 1;
  435. X   Anti_Greeb_X := 12;`20
  436. X   Anti_Greeb_Y := 80;
  437. X   Last_Anti_Greeb_X := Anti_Greeb_X + 1;
  438. X   Last_Anti_Greeb_Y := Anti_Greeb_Y;
  439. X   Marked_Anti_Greeb := False;
  440. X   Marked_Clock_Greeb := False;
  441. X   Marked_Anti_Greeb_X := 0;
  442. X   Marked_Anti_Greeb_Y := 0;
  443. X   Marked_Clock_Greeb_X := 0;
  444. X   Marked_Clock_Greeb_Y := 0;
  445. X   Num_Moves_After_This_pt := 9999;
  446. X   Draw_Screen;
  447. Xend;
  448. X
  449. X
  450. XProcedure Initalise;
  451. X
  452. XVar Rep : Char;
  453. X
  454. X
  455. XBegin
  456. X   LineLimit(Output,Maxint);
  457. X   TT_Init(1);
  458. X   Seed := Clock;
  459. X   Write(Esc,'<',Esc,'`5B2J',esc,'`5B1;1H');
  460. X   Help_Screen('Games:qix.Scn');
  461. X   Level := 0;
  462. X   Lives := 3;
  463. X   Score := 0;
  464. X   Buff_Len := 0;
  465. X   Initalise_Screen;
  466. Xend `7B Initalise `7D;
  467. X  `20
  468. X
  469. XFunction Valid_Move(X,Y:INteger):Boolean;
  470. X
  471. Xbegin
  472. X   If Screen`5BX,Y`5D.Sym = '.' Then`20
  473. X      Valid_Move := False
  474. X   Else`20
  475. X      If Screen`5BX,Y`5D.Wall = Created Then`20
  476. X         Valid_Move := False
  477. X      Else
  478. X         Valid_Move := True;
  479. Xend;
  480. X
  481. XProcedure Move_Anti_Clockwise(Var X,Y,Last_X,Last_Y:INteger);
  482. X
  483. XVar Tmp_X,Tmp_Y : Integer;
  484. X
  485. XBegin
  486. XTmp_X := X;
  487. XTmp_Y := Y;
  488. XCase ( Last_Y-Y) Of`20
  489. X   1 : Case  Screen`5BX,Y`5D.Sym Of`20
  490. X         'l' : X := X + 1;
  491. X         'w' : X := X + 1;
  492. X         't' : X := X + 1;
  493. X         'n' : X := X + 1;
  494. X         'm' : X := X - 1;
  495. X         'v' : Y := Y - 1;
  496. X         'q' : Y := Y - 1;
  497. X       end;
  498. X   0 : Case (Last_X-X) Of`20
  499. X         1 : Case Screen`5BX,y`5D.Sym Of`20
  500. X               'l' : Y := Y + 1;
  501. X               'w' : Y := Y - 1;
  502. X               'k' : Y := Y - 1;
  503. X               't' : X := X - 1;
  504. X               'n' : Y := Y - 1;
  505. X               'u' : Y := Y - 1;
  506. X               'x' : X := X - 1;
  507. X            end;
  508. X         0 : ;
  509. X        -1 : Case Screen`5BX,y`5D.Sym Of`20
  510. X               't' : Y := Y + 1;
  511. X               'n' : Y := Y + 1;
  512. X               'u' : X := X + 1;
  513. X               'm' : Y := Y + 1;
  514. X               'v' : Y := Y + 1;
  515. X               'j' : Y := Y - 1;
  516. X               'x' : X := X + 1;
  517. X            end;
  518. X         end;
  519. X  -1 : Case Screen`5BX,Y`5D.Sym Of`20
  520. X         'w' : Y := Y + 1;
  521. X         'k' : X := X + 1;
  522. X         'n' : X := X - 1;
  523. X         'u' : X := X - 1;
  524. X         'v' : X := X - 1;
  525. X         'j' : X := X - 1;
  526. +-+-+-+-+-+-+-+-  END  OF PART 1 +-+-+-+-+-+-+-+-
  527.  
  528. __________
  529. Darin Reid
  530. Internet: Areid@Mary.Fordham.Edu
  531. Bitnet: Areid@Fordmulc
  532. Phone: (212) 749-8187
  533.